# For PI
    if ("π" in expression):
        new_expression = ""
        for i in range(len(expression)):
            if (expression[i] == "π"):
                new_expression += str(math.pi)
            else:
                new_expression += expression[i]
        expression = new_expression

    # For e
    if ("e" in expression):
        new_expression = ""
        for i in range(len(expression)):
            if (expression[i] == "e"):
                new_expression += str(math.exp(1))
            else:
                new_expression += expression[i]
        expression = new_expression

    # For factorial
    if ("!" in expression):
        for i in range(len(expression)):
            if (expression[i] == "!"):
                pos_fact = i
        number = int(expression[:pos_fact])
        fact = 1
        for i in range(1, number+1):
            fact = fact*i
        expression = str(fact)

    # For power function
    if ("^" in expression):
        for i in range(len(expression)):
            if (expression[i] == "^"):
                pos_power = i
        num = eval(expression[:pos_power])
        exponent = eval(expression[pos_power+1:])
        result = pow(num, exponent)
        expression = str(result)

    # For square root function
    if ("√" in expression):
        for i in range(len(expression)):
            if (expression[i] == "√"):
                pos_root = i
        num = expression[pos_root+1:]
        result = math.sqrt(float(num))
        expression = str(result)

    else:
        code = compile(expression, "<string>", "eval")
        result = eval(code)
        expression = str(result)
